package com.yuwei.lib_ffmpeg

import io.microshow.rxffmpeg.RxFFmpegCommandList
import io.microshow.rxffmpeg.RxFFmpegInvoke
import io.microshow.rxffmpeg.RxFFmpegSubscriber

/**
 * 视频编码工具
 * 主要使用FFmpeg命令来完成不同的编码和解码操作
 */
object VideoEncodeUtil {

    /**
     * 运行FFmpeg模糊处理命令
     * ffmpeg -y -i /storage/emulated/0/1/input.mp4 -vf boxblur=25:5 -preset superfast /storage/emulated/0/1/result.mp4
     */
    private fun runFFmpegCommand(inputFilePath: String, outputFilePath: String,subscriber: RxFFmpegSubscriber){
        //方案一
        var cmdStr = "ffmpeg -y -i $inputFilePath -vf boxblur=25:5 -preset superfast $outputFilePath".split(" ").toTypedArray()
        val commands = cmdStr
        //方案二
        val commandList = RxFFmpegCommandList().apply {
            add("ffmpeg")
            add("-y")
            add("-i")
            add(inputFilePath)
            add("-vf")
            add("boxblur=25:5")
            add("-preset")
            add("superfast")
            add(outputFilePath)
        }.build()
        //创建RxFFmpeg的实例执行命令
        RxFFmpegInvoke.getInstance().runCommandRxJava(commands).subscribe(subscriber)
    }
    /**
     * 运行提取视频的关键帧命令
     * ffmpeg -y -i /storage/emulated/0/1/input.mp4 -f image2 -r 1 -g:v 10 -preset superfast /storage/emulated/0/1/%3d.jpg
     */
    private fun getVideoFrameCommand(inputFilePath: String, outputFilePath: String,listener: RxFFmpegInvoke.IFFmpegListener){
    //方案一
        var cmdStr = "ffmpeg -y -i $inputFilePath -f image2 -r 1 -g:v 10 -preset superfast $outputFilePath".split(" ").toTypedArray()
        val commands = cmdStr
        //创建RxFFmpeg的实例执行命令
        RxFFmpegInvoke.getInstance().runCommand(commands,listener)
    }
    /**
     * 本地多张图片合成 mp4视频
     * 命令: ffmpeg -y -r 24 -i /storage/emulated/0/1/%3d.jpg -vcodec libx264 -crf 25 -pix_fmt yuv420p /storage/emulated/0/1/result.mp4
     */
    private fun createVideoWithMultiImage(images : ArrayList<String>, outputFilePath: String,listener: RxFFmpegInvoke.IFFmpegListener){

    }

}